"use strict";

const Controller = require("egg").Controller;

class HomeController extends Controller {
    async index() {
        const { ctx } = this;
        ctx.body = "hi, egg";
    }

    /**
     * 获取验证码
     */
    async getCode() {
        // 接收手机号
        const { mobile } = this.ctx.params;
        // 该手机号是不是已经有生成的验证码
        const record = await this.service.home.findCodeByMobile(mobile);
        if (record) {
            this.ctx.body = {
                code: 403,
                message: "不能重复获取验证码",
            };
            return;
        }
        // 生成验证码
        const code = String(Math.random()).substr(2, 6);
        // 保存数据库
        const res = await this.service.home.saveCode(mobile, code);
        // 向用户手机号发送验证码（因为需要调用收费的第三方短信服务，所以我们就省略不写了）
        // 验证码发送成功
        this.ctx.body = {
            code: 200,
            message: "验证码发送成功",
        };
    }

    /**
     * 登录
     */
    async login() {
        // 从请求体里取出手机号、验证码
        const { mobile, code } = this.ctx.request.body;
        // 根据手机号，从数据库表中，查验证码
        const record = await this.service.home.findCodeByMobile(mobile);
        if (!record) {
            this.ctx.body = {
                code: 403,
                message: "请先获取验证码",
            };
            return;
        }
        // 检查前端用户输入的验证码，是否和后端保存的验证码一致
        if (record.code !== code) {
            this.ctx.body = {
                code: 400,
                message: "验证码不正确",
            };
            return;
        }
        // 根据校验成功的手机号，去用户表里，找到这个用户，如果该用户不存在，就不让他登录
        const user = await this.service.user.findByMobile(mobile);
        if (!user) {
            this.ctx.body = {
                code: 400,
                message: "该手机号未注册",
            };
            return;
        }
        // 登录生成 token
        const token = this.ctx.helper.genToken({ ...user });
        // 返回响应
        this.ctx.body = {
            code: 200,
            data: {
                user,
                token,
            },
            message: "登录成功",
        };
    }
}

module.exports = HomeController;
